package packet

import (
	"encoding/hex"
	"hy_808/protocol/hygprs"
	"strings"
)

/*
车载端传送上下车客流数据
+0  80 00 40 02 00 24 68
+7  01 00 00 00 34
+12 02 00 00 14 58
+17 03 43
+19 04 01 40 9A 9D
+24 06 62 29 EE 8F
+29 07 00 00 00 00
+34 08 00 00 00 00
+39 09 00 00 方向角26824 标准角度为268.24
+42 0A 00 00 速度2897 为28.97km/hour
+45 0B 01 下行
+47 0C 00 站点序号20
+49 0D 01 前后门，0x00前门，0x01 后门 0x02 中门
+51 29 00 00 上车客流
+54 30 00 00 下车客流
--  31 00 07 应剩余人数 实际一体机上传的数据没有加这个字段
+57 1A 01
+59 00 00 06 7D 81
+64
*/
type Flow struct {
	hygprs.Fields
}

func GenFlow() Flow {
	data, _ := hex.DecodeString(strings.ReplaceAll("80 00 40 02 33 4C 68 01 00 00 00 34 02 00 00 14 53 03 11 04 00 01 5F 22 06 62 29 8B A8 07 00 00 00 00 08 00 00 00 00 09 00 00 0A 00 00 0B 00 0C 0C 0D 01 29 00 00 30 00 00 1A 01 00 00 05 6C 81", " ", ""))
	return Flow{hygprs.MakeFields(hygprs.MakePacket(data))}
}

type Door byte

const (
	DoorFront  Door = 0x00
	DoorMiddle Door = 0x02
	DoorRear   Door = 0x01
)

func (p Flow) SetDoor(v Door) {
	p.Data[50] = byte(v)
}

// 上车人数
func (p Flow) SetGetInto(v uint16) {
	copy(p.Data[52:], hygprs.FromUint16(v))
}

// 下车人数
func (p Flow) SetGetOut(v uint16) {
	copy(p.Data[55:], hygprs.FromUint16(v))
}

func (p Flow) SetSurplus(v uint16) {
	if p.Data[57] != 0x31 {
		// 这个字段原来可能不存在
		p.Data = append(append(append(make([]byte, 0), p.Data[:57]...), 0x31, 0x00, 0x00), p.Data[57:]...)
		p.Reset()
	}
	copy(p.Data[58:], hygprs.FromUint16(v))
}
